package com.xutianpeng.disk.file.service;

import com.xutianpeng.disk.file.entity.SearchFileEntity;
import com.xutianpeng.disk.mybatis.entity.PtFileEntity;
import com.xutianpeng.disk.mybatis.flexigrid.PagingEntity;
import com.xutianpeng.disk.mybatis.flexigrid.TblResponseEntity;
import java.util.List;

public interface FileService {
    /**
     * 保存文件信息
     * @param ptFileEntityList 文件信息列表
     */
    void saveFileInfo(List<PtFileEntity> ptFileEntityList);

    /**
     * 分页查询文件列表
     * @param entity 搜索条件实体
     * @param paging 分页参数实体
     * @return 分页查询结果（包含总条数和文件列表）
     */
    TblResponseEntity<PtFileEntity> queryFileInfoListByPage(SearchFileEntity entity, PagingEntity paging);

    /**
     * 根据文件唯一标识查询文件信息
     * @param fileUuid 文件唯一标识
     * @return 文件信息实体
     */
    PtFileEntity queryFileInfoById(String fileUuid);

    /**
     * 查询所有的文件列表
     * @return 所有文件信息列表
     */
    List<PtFileEntity> queryFileListAll();

    /**
     * 将文件移至回收站（更新删除标识）
     * @param fileUuid 文件唯一标识
     */
    void updateFileToRecycle(String fileUuid);

    /**
     * 批量更新文件的父目录UUID（用于文件移动）
     * @param fileUuids 需要移动的文件UUID列表
     * @param targetParentUuid 目标父文件夹UUID
     */
    void updateParentUuids(List<String> fileUuids, String targetParentUuid);

    /**
     * 查询所有文件的树形结构数据（用于前端文件树展示）
     * @return 包含文件层级关系的列表
     */
    List<PtFileEntity> queryAllFileTree();

    /**
     * 重命名文件
     * @param fileUuid 要重命名的文件UUID
     * @param newFileName 新的文件名
     * @return 操作结果信息
     * @throws Exception 处理过程中可能抛出的异常
     */
    String renameFile(String fileUuid, String newFileName) throws Exception;
}
